package scala.com.shujia.jichu

object Demo18Map {
  def main(args: Array[String]): Unit = {
    //创建Map集合
    //键是唯一的，键一样的时候，值会被覆盖
    val map1: Map[Int, String] = Map((1001, "张三"), (1002, "李四"), (1003, "王五"), (1001, "赵六"), 1005 -> "易政")
    println(map1)

    println("=" * 50)
    //可以根据键获取值
    //    println(map1(1006)) // 小括号获取值，键不存在报错
    //    println(map1.get(1006)) // get函数获取，键不存在，返回None
    println(map1.getOrElse(1006, 0)) //根据键获取值，若键不存在，返回提供的默认值，默认值的类型可以是任意数据类型
    println("=" * 50)
    val keys: Iterable[Int] = map1.keys // 获取所有的键，组成一个迭代器
    for (e <- keys) {
      println(e)
    }
    println("=" * 50)
    val values: Iterable[String] = map1.values // 获取所有的值，组成一个迭代器
    for (e <- values) {
      println(e)
    }
    println("=" * 50)

    //遍历Map集合第一种方式，先获取所有的键，根据键获取每个值
    val keys2: Iterable[Int] = map1.keys // 获取所有的键，组成一个迭代器
    for (e <- keys2) {
      val v: Any = map1.getOrElse(e, 0)
      println(s"键:${e}, 值:${v}")
    }
    println("=" * 50)
    //遍历Map集合第二种方式，先获取所有的键，根据键获取每个值
    for (kv <- map1) { // 直接遍历map集合，得到每一个键值对组成的元组
      println(s"键:${kv._1}, 值:${kv._2}")
    }
    println("=" * 50)
    //遍历Map集合第三种方式，先获取所有的键，根据键获取每个值
    map1.foreach((kv: (Int, String)) => println(s"键:${kv._1}, 值:${kv._2}"))


  }

}
